package org.example.completed.utils;

import com.aliyun.oss.OSS;
import com.aliyun.oss.OSSClientBuilder;
import org.example.completed.domain.AliOSSProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.io.InputStream;
import java.util.UUID;

/*
* 功能：利用阿里云OSS存储，将上传的文件上传到阿里云云端
* 时间：2025/3/6
 */

@Component
public class AliOSSUtils {

    @Autowired//将OSS的配置注入进来，后面需要用到
    private AliOSSProperties aliOSSProperties;

    /**
     * 以下是一个实现上传文件到OSS的方法
     */

    public String upload(MultipartFile file) throws IOException {

        //获取阿里云OSS参数
        String endpoint = aliOSSProperties.getEndpoint();
        String accessKeyId = aliOSSProperties.getAccessKeyId();
        String accessKeySecret = aliOSSProperties.getAccessKeySecret();
        String bucketName = aliOSSProperties.getBucketName();

        System.out.println(111);

        // 获取上传的文件的输入流
        InputStream inputStream = file.getInputStream();


        // 避免文件覆盖，需要使用UUID将文件重命名
        String originalFilename = file.getOriginalFilename();
        String fileName = UUID.randomUUID().toString() + originalFilename.substring(originalFilename.lastIndexOf("."));

        //上传文件到 OSS
        OSS ossClient = new OSSClientBuilder().build(endpoint, accessKeyId, accessKeySecret);
        ossClient.putObject(bucketName, fileName, inputStream);

        //文件访问路径
        //String url = endpoint.split("//")[0] + "//" + bucketName + "." + endpoint.split("//")[1] + "/" + fileName;
        String url = buildUrl(endpoint,bucketName,fileName);
        System.out.println(url);
        // 关闭ossClient
        ossClient.shutdown();

        // 把上传到oss的路径返回
        return url;

    }

    private String buildUrl(String endpoint, String bucketName, String fileName) {
        // 不再使用 split("//")，直接构建 URL
        if (endpoint.contains("://")) {
            // 基本不走这块
            return bucketName + "." + endpoint + "/" + fileName;
        } else {
            return "https://itzjh." + endpoint + "/"  + fileName;
        }
    }

}
